/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package VO;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author HELIOS
 */
@Entity
@Table(name = "profesor", catalog = "profesoresfund", schema = "")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "CProfesor.findAll", query = "SELECT c FROM CProfesor c"),
    @NamedQuery(name = "CProfesor.findByTipoDocumento", query = "SELECT c FROM CProfesor c WHERE c.tipoDocumento = :tipoDocumento"),
    @NamedQuery(name = "CProfesor.findByNumDocumento", query = "SELECT c FROM CProfesor c WHERE c.numDocumento = :numDocumento"),
    @NamedQuery(name = "CProfesor.findByLugarExpDocumento", query = "SELECT c FROM CProfesor c WHERE c.lugarExpDocumento = :lugarExpDocumento"),
    @NamedQuery(name = "CProfesor.findByPrimerApellido", query = "SELECT c FROM CProfesor c WHERE c.primerApellido = :primerApellido"),
    @NamedQuery(name = "CProfesor.findBySegundoApellido", query = "SELECT c FROM CProfesor c WHERE c.segundoApellido = :segundoApellido"),
    @NamedQuery(name = "CProfesor.findByNombreCompleto", query = "SELECT c FROM CProfesor c WHERE c.nombreCompleto = :nombreCompleto"),
    @NamedQuery(name = "CProfesor.findByEstadoCivil", query = "SELECT c FROM CProfesor c WHERE c.estadoCivil = :estadoCivil"),
    @NamedQuery(name = "CProfesor.findByGenero", query = "SELECT c FROM CProfesor c WHERE c.genero = :genero"),
    @NamedQuery(name = "CProfesor.findByLibretaMilitar", query = "SELECT c FROM CProfesor c WHERE c.libretaMilitar = :libretaMilitar"),
    @NamedQuery(name = "CProfesor.findByFechaNacimiento", query = "SELECT c FROM CProfesor c WHERE c.fechaNacimiento = :fechaNacimiento"),
    @NamedQuery(name = "CProfesor.findByLugarNacimiento", query = "SELECT c FROM CProfesor c WHERE c.lugarNacimiento = :lugarNacimiento"),
    @NamedQuery(name = "CProfesor.findByFondoPensiones", query = "SELECT c FROM CProfesor c WHERE c.fondoPensiones = :fondoPensiones"),
    @NamedQuery(name = "CProfesor.findByEpsAfiliado", query = "SELECT c FROM CProfesor c WHERE c.epsAfiliado = :epsAfiliado"),
    @NamedQuery(name = "CProfesor.findByDireccionResidencia", query = "SELECT c FROM CProfesor c WHERE c.direccionResidencia = :direccionResidencia"),
    @NamedQuery(name = "CProfesor.findByBarrioResidencia", query = "SELECT c FROM CProfesor c WHERE c.barrioResidencia = :barrioResidencia"),
    @NamedQuery(name = "CProfesor.findByCiudadResidencia", query = "SELECT c FROM CProfesor c WHERE c.ciudadResidencia = :ciudadResidencia"),
    @NamedQuery(name = "CProfesor.findByTelefono1", query = "SELECT c FROM CProfesor c WHERE c.telefono1 = :telefono1"),
    @NamedQuery(name = "CProfesor.findByTelefono2", query = "SELECT c FROM CProfesor c WHERE c.telefono2 = :telefono2"),
    @NamedQuery(name = "CProfesor.findByCelular", query = "SELECT c FROM CProfesor c WHERE c.celular = :celular"),
    @NamedQuery(name = "CProfesor.findByEmailInstitucional", query = "SELECT c FROM CProfesor c WHERE c.emailInstitucional = :emailInstitucional"),
    @NamedQuery(name = "CProfesor.findByEmailPersonal", query = "SELECT c FROM CProfesor c WHERE c.emailPersonal = :emailPersonal")})
public class CProfesor implements Serializable {
    private static final long serialVersionUID = 1L;
    @Basic(optional = false)
    @Column(name = "tipoDocumento", nullable = false, length = 20)
    private String tipoDocumento;
    @Id
    @Basic(optional = false)
    @Column(name = "numDocumento", nullable = false, length = 20)
    private String numDocumento;
    @Basic(optional = false)
    @Column(name = "lugarExpDocumento", nullable = false, length = 50)
    private String lugarExpDocumento;
    @Basic(optional = false)
    @Column(name = "primerApellido", nullable = false, length = 30)
    private String primerApellido;
    @Basic(optional = false)
    @Column(name = "segundoApellido", nullable = false, length = 30)
    private String segundoApellido;
    @Basic(optional = false)
    @Column(name = "nombreCompleto", nullable = false, length = 60)
    private String nombreCompleto;
    @Basic(optional = false)
    @Column(name = "estadoCivil", nullable = false, length = 25)
    private String estadoCivil;
    @Basic(optional = false)
    @Column(name = "genero", nullable = false, length = 20)
    private String genero;
    @Column(name = "libretaMilitar", length = 20)
    private String libretaMilitar;
    @Basic(optional = false)
    @Column(name = "fechaNacimiento", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date fechaNacimiento;
    @Basic(optional = false)
    @Column(name = "lugarNacimiento", nullable = false, length = 60)
    private String lugarNacimiento;
    @Basic(optional = false)
    @Column(name = "fondoPensiones", nullable = false, length = 60)
    private String fondoPensiones;
    @Basic(optional = false)
    @Column(name = "epsAfiliado", nullable = false, length = 60)
    private String epsAfiliado;
    @Basic(optional = false)
    @Column(name = "direccionResidencia", nullable = false, length = 255)
    private String direccionResidencia;
    @Column(name = "barrioResidencia", length = 60)
    private String barrioResidencia;
    @Basic(optional = false)
    @Column(name = "ciudadResidencia", nullable = false, length = 60)
    private String ciudadResidencia;
    @Basic(optional = false)
    @Column(name = "telefono1", nullable = false, length = 20)
    private String telefono1;
    @Column(name = "telefono2", length = 20)
    private String telefono2;
    @Basic(optional = false)
    @Column(name = "celular", nullable = false, length = 20)
    private String celular;
    @Basic(optional = false)
    @Column(name = "emailInstitucional", nullable = false, length = 255)
    private String emailInstitucional;
    @Basic(optional = false)
    @Column(name = "emailPersonal", nullable = false, length = 255)
    private String emailPersonal;
    @JoinTable(name = "profesorarea", joinColumns = {
        @JoinColumn(name = "docProfesor", referencedColumnName = "numDocumento", nullable = false)}, inverseJoinColumns = {
        @JoinColumn(name = "idArea", referencedColumnName = "idArea", nullable = false),
        @JoinColumn(name = "idFacultad", referencedColumnName = "idFacultad", nullable = false)})
    @ManyToMany
    private Collection<CArea> cAreaCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "docProfesor")
    private Collection<CEstudio> cEstudioCollection;

    public CProfesor() {
    }

    public CProfesor(String numDocumento) {
        this.numDocumento = numDocumento;
    }

    public CProfesor(String numDocumento, String tipoDocumento, String lugarExpDocumento, String primerApellido, String segundoApellido, String nombreCompleto, String estadoCivil, String genero, Date fechaNacimiento, String lugarNacimiento, String fondoPensiones, String epsAfiliado, String direccionResidencia, String ciudadResidencia, String telefono1, String celular, String emailInstitucional, String emailPersonal) {
        this.numDocumento = numDocumento;
        this.tipoDocumento = tipoDocumento;
        this.lugarExpDocumento = lugarExpDocumento;
        this.primerApellido = primerApellido;
        this.segundoApellido = segundoApellido;
        this.nombreCompleto = nombreCompleto;
        this.estadoCivil = estadoCivil;
        this.genero = genero;
        this.fechaNacimiento = fechaNacimiento;
        this.lugarNacimiento = lugarNacimiento;
        this.fondoPensiones = fondoPensiones;
        this.epsAfiliado = epsAfiliado;
        this.direccionResidencia = direccionResidencia;
        this.ciudadResidencia = ciudadResidencia;
        this.telefono1 = telefono1;
        this.celular = celular;
        this.emailInstitucional = emailInstitucional;
        this.emailPersonal = emailPersonal;
    }

    public String getTipoDocumento() {
        return tipoDocumento;
    }

    public void setTipoDocumento(String tipoDocumento) {
        this.tipoDocumento = tipoDocumento;
    }

    public String getNumDocumento() {
        return numDocumento;
    }

    public void setNumDocumento(String numDocumento) {
        this.numDocumento = numDocumento;
    }

    public String getLugarExpDocumento() {
        return lugarExpDocumento;
    }

    public void setLugarExpDocumento(String lugarExpDocumento) {
        this.lugarExpDocumento = lugarExpDocumento;
    }

    public String getPrimerApellido() {
        return primerApellido;
    }

    public void setPrimerApellido(String primerApellido) {
        this.primerApellido = primerApellido;
    }

    public String getSegundoApellido() {
        return segundoApellido;
    }

    public void setSegundoApellido(String segundoApellido) {
        this.segundoApellido = segundoApellido;
    }

    public String getNombreCompleto() {
        return nombreCompleto;
    }

    public void setNombreCompleto(String nombreCompleto) {
        this.nombreCompleto = nombreCompleto;
    }

    public String getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }

    public String getLibretaMilitar() {
        return libretaMilitar;
    }

    public void setLibretaMilitar(String libretaMilitar) {
        this.libretaMilitar = libretaMilitar;
    }

    public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public String getLugarNacimiento() {
        return lugarNacimiento;
    }

    public void setLugarNacimiento(String lugarNacimiento) {
        this.lugarNacimiento = lugarNacimiento;
    }

    public String getFondoPensiones() {
        return fondoPensiones;
    }

    public void setFondoPensiones(String fondoPensiones) {
        this.fondoPensiones = fondoPensiones;
    }

    public String getEpsAfiliado() {
        return epsAfiliado;
    }

    public void setEpsAfiliado(String epsAfiliado) {
        this.epsAfiliado = epsAfiliado;
    }

    public String getDireccionResidencia() {
        return direccionResidencia;
    }

    public void setDireccionResidencia(String direccionResidencia) {
        this.direccionResidencia = direccionResidencia;
    }

    public String getBarrioResidencia() {
        return barrioResidencia;
    }

    public void setBarrioResidencia(String barrioResidencia) {
        this.barrioResidencia = barrioResidencia;
    }

    public String getCiudadResidencia() {
        return ciudadResidencia;
    }

    public void setCiudadResidencia(String ciudadResidencia) {
        this.ciudadResidencia = ciudadResidencia;
    }

    public String getTelefono1() {
        return telefono1;
    }

    public void setTelefono1(String telefono1) {
        this.telefono1 = telefono1;
    }

    public String getTelefono2() {
        return telefono2;
    }

    public void setTelefono2(String telefono2) {
        this.telefono2 = telefono2;
    }

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public String getEmailInstitucional() {
        return emailInstitucional;
    }

    public void setEmailInstitucional(String emailInstitucional) {
        this.emailInstitucional = emailInstitucional;
    }

    public String getEmailPersonal() {
        return emailPersonal;
    }

    public void setEmailPersonal(String emailPersonal) {
        this.emailPersonal = emailPersonal;
    }

    @XmlTransient
    public Collection<CArea> getCAreaCollection() {
        return cAreaCollection;
    }

    public void setCAreaCollection(Collection<CArea> cAreaCollection) {
        this.cAreaCollection = cAreaCollection;
    }

    @XmlTransient
    public Collection<CEstudio> getCEstudioCollection() {
        return cEstudioCollection;
    }

    public void setCEstudioCollection(Collection<CEstudio> cEstudioCollection) {
        this.cEstudioCollection = cEstudioCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (numDocumento != null ? numDocumento.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof CProfesor)) {
            return false;
        }
        CProfesor other = (CProfesor) object;
        if ((this.numDocumento == null && other.numDocumento != null) || (this.numDocumento != null && !this.numDocumento.equals(other.numDocumento))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "fundacionprofesores.CProfesor[ numDocumento=" + numDocumento + " ]";
    }
    
}
